package demo1;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-21
 * Time: 10:15
 */
public class Example {
    String str = new String("good");
    char[] ch = {'a', 'b', 'c'};

    public static void main(String args[]) {
        Example ex = new Example();
        ex.change(ex.str, ex.ch);
        System.out.print(ex.str + " and ");
        System.out.print(ex.ch);
    }

    public void change(String str, char ch[]) {
        str = "test ok";
        ch[0] = 'g';
    }
}

/*
执行结果：
good and gbc
 */

/*
这段Java代码定义了一个Example类，并在其中声明了一个字符串str和一个字符数组ch。main方法中创建了Example类的一个实例，并调用了change方法来尝试修改这两个成员变量。然后，它打印出这两个变量的值。

关键点是理解Java中对象引用和原始数据类型（如字符数组中的元素）的传递方式。

对于String str：在Java中，字符串是不可变的，且String类型的变量传递的是引用的拷贝。在change方法中，str引用被重新指向了一个新的字符串对象"test ok"，但这并不影响原始对象str的引用，因为Java是值传递，这里的“值”是引用的拷贝。所以，str的值在change方法之外保持不变。
对于char ch[]：字符数组是引用类型，但在change方法中，我们没有改变ch数组的引用，而是修改了数组的内容（即ch[0]的值被改变为'g'）。这种修改是反映在原始数组上的，因为数组的内容是共享的。
因此，输出将会是原始字符串"good"（因为str的引用没有被改变）和修改后的字符数组（因为数组内容被修改了）。所以，输出结果是：

good and gbc
这里，gbc是字符数组ch的新内容，其中第一个元素被change方法修改为'g'，而其余元素保持不变（'b'和'c'）。
 */